# 提示词字典
# --------------------------72B识别柱状图数据准确；结构也好；当前仅有可别数据不准确（50s/页）--------------------------------
ocr_image_comprehend_prompt_user="""
任务目标
提取图片内容并保留原始布局结构。

1. 文本提取
- 提取所有文本：标题、描述、标签、图例、数据值、注释等
- 保留原始格式：换行、缩进、字体样式
- 按自然顺序排列：从上到下，从左到右
- 多语言文本标注：[Language: English]或[Language: Chinese]
- 文本位置与原图一致
- 目录文本特殊处理：
  * 文字后跟圆点(如"标题......")的格式属于目录
  * 严格保留目录中的所有圆点、空格和缩进
  * 不要随意将目录项断行或合并行
  * 保持目录的原始排版，包括点线、页码和层级关系

2. 图表处理
- 图表直接呈现数据，不添加额外标注
- 图表数据以表格形式提取，不需要单独标题
- 图例与数据正确对应：
  * 根据图例的颜色、形状或线型，准确匹配对应的数据系列
  * 表格中各数据系列名称应与图例完全一致
- 表格结构：
  * 表头行：X轴标签，各数据系列名称（与图例一致）
  * 数据行：每行对应X轴一个类别/时间点及其各系列数值
- 缺失数据点用"null"表示

3. 输出结构
- 保持原始排版：按原图顺序呈现内容
- 文本与图表分开呈现
- 不使用额外解释性连接词
"""
# --------------------------72B识别数据准确；但结构不好；--------------------------------
ocr_image_comprehend_prompt_user_b3="""
请执行以下任务：
- 布局顺序：从上到下，从左到右。 
**文本提取**：提取图片中所有文本内容，包括标题、描述、标签、图例、数据值、注释，保持原始布局、格式，按图片自然顺序排列。  
- **图表/数据可视化处理**（若图片包含图表，如柱状图、折线图等）：  
  - 识别图表类型：柱状图、折线图、饼图等。  
  - 提取X轴标签：横轴类别、时间点。  
  - 提取Y轴标签：纵轴数值单位，如百分比、数量。  
  - 提取图例：不同数据系列名称、颜色标识。  
  - 提取每个数据系列数值：逐一列出类别、时间点对应数据值。 总结为表格。 
- **结构保持**：确保输出文本、图表数据分块呈现，图表数据与图例对应，文本描述与图表内容分开、逻辑关联。

"""

# --------------------------omni-结构不错，目录识别也不错(就是点没了)。待优化：图表数据识别不错，不过对于图例与标签的对应还不好。--------------------------------
ocr_image_comprehend_prompt_user_b2="""
请执行以下任务：
- **文本提取**：提取图片中所有文本内容，包括标题、描述、标签、图例、数据值、注释，保持原始布局、格式，按图片自然顺序排列。  
- **图表/数据可视化处理**（若图片包含图表，如柱状图、折线图等）：  
  - 识别图表类型：柱状图、折线图、饼图等。  
  - 提取X轴标签：横轴类别、时间点。  
  - 提取Y轴标签：纵轴数值单位，如百分比、数量。  
  - 提取图例：不同数据系列名称、颜色标识。  
  - 提取每个数据系列数值：逐一列出类别、时间点对应数据值。  
  - **数据趋势分析**：  
    - 描述数据趋势：分析每个数据系列变化趋势，上升、下降、波动。  
    - 识别关键数值：指出最大值、最小值、异常值，如最高准确率、最低得分。  
    - 比较结论：比较不同数据系列表现，指出特定类别表现最佳、最差系列。  
- **结构保持**：确保输出文本、图表数据分块呈现，图表数据与图例对应，文本描述与图表内容分开、逻辑关联。
"""

# --------------------------omni-结构不错，目录识别也不错，但图数据识别错误，还有连接语--------------------------------
ocr_image_comprehend_prompt_user_b1="""
请执行以下任务：
文本提取：提取图片中的所有文本内容，包括标题、描述、标签、图例、数据值和注释，保持原始布局和格式，按图片中的自然顺序排列。
图表/数据可视化处理（若图片包含图表，如柱状图、折线图等）：
识别图表类型（例如柱状图、折线图、饼图等）。
提取X轴标签（横轴上的类别或时间点）。
提取Y轴标签（纵轴上的数值单位，如百分比、数量等）。
提取图例（不同数据系列的名称或颜色标识）。
提取每个数据系列的数值：逐一列出每个类别或时间点对应的数据值。
数据趋势分析：
描述数据趋势：分析每个数据系列的变化趋势（例如上升、下降、波动等）。
识别关键数值：指出最大值、最小值或异常值（例如最高准确率、最低得分等）。
比较结论：比较不同数据系列的表现，指出哪些系列在特定类别中表现最佳或最差。
结构保持：确保输出的文本和图表数据分块呈现，图表数据与图例对应，文本描述与图表内容分开但逻辑关联。

"""

# ----------------------------------------------------------
ocr_prompt_user = """
连续文字内容（如正文、目录、标题等）：

直接识别：保持原文结构，不额外解释。例如，目录部分应直接输出为文本，而非误判为图片。

当前问题：原OCR将目录误识别为代码块（```包裹），改进后应正常输出为纯文本。

不连续内容（如图片、图表、公式等）：

理解后解释：对非文本内容进行描述性说明。例如：

图片需标注"Figure X: [描述内容]"。

表格需提取关键数据或结构。

当前问题：原OCR未解释图片内容（如"TrainingPerformance-婷20.png"），改进后需补充说明（如"图表展示模型性能对比"）。
"""
json_bill_prompt_user_omni = """
"将表格数据转为JSON格式，空值用null表示。字段包括：对手方账号、对手方名称、对手方开户行、记账日期、借方发生额、贷方发生额、余额、操作员、备注、摘要、用途。保持原始数据完整。
"""

json_bill_prompt_user = """
{
  "instruction": "将以下银行交易明细表格数据转换为规范的JSON格式，要求：",
  "requirements": [
    "1. 完全保留原始表格中的所有数据字段",
    "2. 表格中的空单元格转换为JSON中的null值",
    "3. 严格保持金额字段的原始格式（如'1,900,000.00'）",
    "4. 确保日期字段格式为'YYYY-MM-DD'",
    "5. 字段名称使用中文原文（如'对手方账号'）",
    "6. 输出为包含'transaction_details'数组的JSON对象",
    "7. 处理时注意第三个交易记录中'对手方账号'应为'120110101000016344'（修正原表格可能的笔误）"
  ],
  "input_example": {
    "description": "类似以下表格结构的数据",
    "columns": [
      "对手方账号", "对手方名称", "对手方开户行", "记账日期",
      "借方发生额", "贷方发生额", "余额", "操作员",
      "备注", "摘要", "用途"
    ]
  },
  "output_format": {
    "transaction_details": [
      {
        "对手方账号": "string|null",
        "对手方名称": "string|null",
        "对手方开户行": "string|null",
        "记账日期": "string",
        "借方发生额": "string|null",
        "贷方发生额": "string|null",
        "余额": "string",
        "操作员": "string",
        "备注": "string|null",
        "摘要": "string|null",
        "用途": "string|null"
      }
    ]
  }
}
"""
# 银行对账单提取JSON的提示词
bank_statement_prompt_user = """
# 指令
请从提供的银行对账单中提取所有关键字段，并按以下要求输出结构化JSON数据：

# 输出要求
1. 格式：{"json_result_cn":{"中文键":"值"},"json_result_en":{"en_key":"值"}}
2. 中英文键名严格对应（中文用自然表述，英文用snake_case）
3. 保留原始数据的格式、单位和符号
4. 空值字段用null表示
5. 金额类字段需保留逗号分隔符和货币单位
6. 日期保持YYYY-MM-DD格式
7. 空行或空列或者空格均不要省略，在json中用null表示；

# 字段映射规范
以下是交易明细键名映射关系的JSON格式总结：
{
  "transaction_mapping": {
    "account_info": {
      "cn": "账户信息",
      "en": "account_information",
      "fields": {
        "银行名称": "bank_name",
        "账号": "account_number",
        "账户名称": "account_name"
      }
    },
    "transaction_details": {
      "cn": "交易明细",
      "en": "transaction_details",
      "fields": [
        {
          "cn": "对手方账号",
          "en": "counterparty_account"
        },
        {
          "cn": "对手方名称",
          "en": "counterparty_name"
        },
        {
          "cn": "对手方开户行",
          "en": "counterparty_branch"
        },
        {
          "cn": "记账日期",
          "en": "posting_date"
        },
        {
          "cn": "借方发生额",
          "en": "dr_amount",
          "note": "借方金额（支出）"
        },
        {
          "cn": "贷方发生额",
          "en": "cr_amount",
          "note": "贷方金额（收入）"
        },
        {
          "cn": "余额",
          "en": "balance"
        },
        {
          "cn": "操作员",
          "en": "operator_id"
        },
        {
          "cn": "备注",
          "en": "description"
        },
        {
          "cn": "摘要",
          "en": "summary"
        },
        {
          "cn": "用途",
          "en": "purpose"
        }
      ]
    },
    "notes": [
      "金额字段均使用字符串格式（如\"50.00\"）",
      "空值表示为\"null\"字符串",
      "英文description对应中文备注而非摘要",
      "英文JSON中摘要字段无直接对应项"
    ]
  }
}

注意：不对值进行任何处理，保持原始内容。内容如下：

"""

json_cn_en_finance_prompt_system = """
你是一个专业的多语言财务数据处理助手，擅长将中文财务数据转换为结构化、符合国际标准的双语JSON格式。请遵循以下规则：
1. 严格保留原始数据的值和格式（如日期、金额的空格/逗号分隔）
2. 中文键名直接保留在`json_result_cn`中
3. 英文键名需翻译为专业财务术语，存储在`json_result_en`中,但键对应的值不改变；
4. 银行名称、公司名等专有名词按通用英文翻译规则处理
5. 若字段值为空，保持原样输出`""`
6. 输出必须是标准JSON，无需Markdown代码块标记
        """
  
json_cn_en_finance_prompt_user = """
          请将以下中文财务交易数据转换为双语JSON格式，要求包含`json_result_cn`（中文键）和`json_result_en`（英文键）两个版本：
输入数据：
```json
[
    {
        "对手方账号": "12050110252200001002",
        "对手方名称": "天津鹿鼎永泰科技有限公司",
        "对手方开户行": "中国建设银行股份有限公司天津梅苑路支行",
        "记账日期": "2024-06-25",
        "借方发生额": "",
        "贷方发生额": "50.00",
        "余额": "50.00",
        "操作员": "2PS",
        "备注": "",
        "摘要": "二代小额",
        "用途": "往来款"
    }
]
```
"""

# 在这里可以添加更多提示词
# 示例：另一个提示词
text_summary_prompt = """
# 指令
请总结提供的文本内容，保留关键信息并简化表达。

# 要求
1. 保持原文的主要含义
2. 删除冗余信息
3. 使用简洁明了的语言
4. 总结后的文本长度应不超过原文的三分之一
"""

invoice_extraction_user_prompt_b1="""
严格提取发票信息至JSON格式，输出包含中英双语版本。要求：
1) 完整性：所有字段必须输出，空值填null；
2) 精确性：数值保留原始精度，禁止截断/四舍五入；
3) 字段映射：映射字段的键；

字段映射规则（严格遵循以下字段名）：
{
    "machineNo": {"en": "machineNo", "cn": "机器号码"},
    "invoiceNo": {"en": "invoiceNo", "cn": "发票号码/发票编号"},
    "invoiceType": {"en": "invoiceType", "cn": "发票类型"},
    "specificBusinessTypes": {"en": "specificBusinessTypes", "cn": "特定业务类型"},
    "invoicingDate": {"en": "invoicingDate", "cn": "开票日期"},
    "purchaserName": {"en": "purchaserName", "cn": "购买方名称"},
    "purchaserCode": {"en": "purchaserCode", "cn": "购买方纳税人识别号"},
    "sellerName": {"en": "sellerName", "cn": "销售方名称"},
    "sellerCode": {"en": "sellerCode", "cn": "销售方纳税人识别号"},
    "tradeName": {"en": "tradeName", "cn": "货物或应税劳务名称"},
    "model": {"en": "model", "cn": "规格型号"},
    "unit": {"en": "unit", "cn": "单位"},
    "number": {"en": "number", "cn": "数量"},
    "unitPrice": {"en": "unitPrice", "cn": "单价","正确":"7075.47321","错误":"7075.47"},
    "totalPrice": {"en": "totalPrice", "cn": "金额"},
    "taxRate": {"en": "taxRate", "cn": "税率"},
    "taxAmount": {"en": "taxAmount", "cn": "税额"},
    "totalAmount": {"en": "totalAmount", "cn": "合计金额"},
    "totalTax": {"en": "totalTax", "cn": "合计税额"},
    "payee": {"en": "payee", "cn": "收款人"},
    "reviewer": {"en": "reviewer", "cn": "复核"},
    "drawer": {"en": "drawer", "cn": "开票人"},
    "totalBig": {"en": "totalBig", "cn": "价税合计(大写)"},
    "totalSmall": {"en": "totalSmall", "cn": "价税合计(小写)"},
    "remark": {"en": "remark", "cn": "备注"}
}
4）字段的值保持不变，不要映射为英文；错误示例： {'json_result_cn':{'税率':'6%'}映射为'json_result_en':{'taxRate':'six percent'}}
5.单价保存全部精度，不要截断为两位小数点。{"单价": "7075.47321"}映射为{"unitPrice": "7075.47321"}正确，{"单价": "7075.47"}映射为{"unitPrice": "7075.47"}错误；
6.规格型号字段/model，若没有识别出值时，输出为null，不要瞎编；
"""

invoice_extraction_user_prompt="""
严格提取发票信息至JSON格式，输出必须包含完整的中英双语版本，并以代码块形式呈现。要求：
1) 完整性：所有字段必须输出，空值填null，不得使用虚构值填充；
2) 精确性：数值保留原始精度，禁止截断或四舍五入；
3) 输出格式：必须使用```json包裹，内容为完整JSON字符串；
4) 多项数据处理：多行商品数据需放入数组/列表（如["项目1", "项目2"]），不得使用换行符分隔；
5) 必要字段：金额和税率必须有值，税额通过计算得出；
6) 表格列识别：先识别表头确定每列字段，再按行提取数据，避免列错位；

字段映射规则（严格遵循以下字段名）：
{
    "machineNo": {"en": "machineNo", "cn": "机器号码"},
    "invoiceNo": {"en": "invoiceNo", "cn": "发票号码/发票编号"},
    "invoiceType": {"en": "invoiceType", "cn": "发票类型"},
    "specificBusinessTypes": {"en": "specificBusinessTypes", "cn": "特定业务类型"},
    "invoicingDate": {"en": "invoicingDate", "cn": "开票日期"},
    "purchaserName": {"en": "purchaserName", "cn": "购买方名称"},
    "purchaserCode": {"en": "purchaserCode", "cn": "购买方纳税人识别号"},
    "sellerName": {"en": "sellerName", "cn": "销售方名称"},
    "sellerCode": {"en": "sellerCode", "cn": "销售方纳税人识别号"},
    "tradeName": {"en": "tradeName", "cn": "货物或应税劳务名称"},
    "model": {"en": "model", "cn": "规格型号"},
    "unit": {"en": "unit", "cn": "单位"},
    "number": {"en": "number", "cn": "数量"},
    "unitPrice": {"en": "unitPrice", "cn": "单价","正确":"7075.47321","错误":"7075.47"},
    "totalPrice": {"en": "totalPrice", "cn": "金额"},
    "taxRate": {"en": "taxRate", "cn": "税率"},
    "taxAmount": {"en": "taxAmount", "cn": "税额"},
    "totalAmount": {"en": "totalAmount", "cn": "合计金额"},
    "totalTax": {"en": "totalTax", "cn": "合计税额"},
    "payee": {"en": "payee", "cn": "收款人"},
    "reviewer": {"en": "reviewer", "cn": "复核"},
    "drawer": {"en": "drawer", "cn": "开票人"},
    "totalBig": {"en": "totalBig", "cn": "价税合计(大写)"},
    "totalSmall": {"en": "totalSmall", "cn": "价税合计(小写)"},
    "remark": {"en": "remark", "cn": "备注"}
}

注意事项：
1) 字段值保持原文，不得翻译；错误示例：{"税率":"6%"}不得映射为{"taxRate":"six percent"}；
2) 单价保留全部精度，如{"单价":"7075.47321"}正确，{"单价":"7075.47"}错误；
3) 项目区域按表格行列结构识别，空值用null替代，不得填充虚构数据；
4) 输出为```json包裹的完整JSON，包含"json_result_cn"和"json_result_en"两个对象；
5) 多行商品用JSON数组表示，数组长度一致，元素一一对应；
6) 若某字段无法识别，填null，确保数组长度一致；
7) 若表格字段为空，识别为null，不得猜测或填充；
8) 税额计算公式：税额 = 向上取整(金额 * 税率, 2位小数)，如金额"120.71"，税率"6%"，税额为"7.25"；
9) 表格识别流程：
    a. 识别表头，确定每列字段（货物名称、规格型号、单位、数量、单价、金额、税率、税额）
    b. 若整列为空，所有行填null
    c. 逐行提取数据，确保列对应正确
    d. 区分单价和金额列，位置固定，不得混淆
10) 空字段识别为null，不得用其他数据填充；
11) 按表格物理位置识别列，不根据数值大小重新分配。

输出示例：
```json
{
    "json_result_cn": {
        "机器号码": null,
        "发票号码": "25122000000023665263",
        "发票类型": "增值税专用发票",
        "特定业务类型": null,
        "开票日期": "2025年04月14日",
        "购买方名称": "天津精信互动科技有限公司",
        "购买方纳税人识别号": "91120116MA06JG3A0T",
        "销售方名称": "天津中科吴宇科技有限公司",
        "销售方纳税人识别号": "91120116MA07J8594A",
        "货物或应税劳务名称": ["*企业管理服务*物业费", "*水冰雪*水费", "*水冰雪*水费", "*水冰雪*水费", "*供电*电费", "*供电*电费", "*供电*电费"],
        "规格型号": ["2025.04.01-202\n5.06.30", "2025.01.01-202\n5.01.31", "2025.02.01-202\n5.02.28", "2025.03.01-202\n5.03.31", "2025.01.01-202\n5.01.31", "2025.02.01-202\n5.02.28", "2025.03.01-202\n5.03.31"],
        "单位": [null, null, null, null, null, null, null],
        "数量": [null, null, null, null, null, null, null],
        "单价": [null, null, null, null, null, null, null],
        "金额": ["2011.84", "20.09", "17.18", "19.33", "1781.31", "1097.64", "246.09"],
        "税率": ["6%", "13%", "13%", "13%", "13%", "13%", "13%"],
        "税额": ["120.71", "2.61", "2.23", "2.51", "231.57", "142.69", "31.99"],
        "合计金额": "￥5193.48",
        "合计税额": "￥534.31",
        "收款人": null,
        "复核": null,
        "开票人": "马晓静",
        "价税合计(大写)": "伍仟柒佰贰拾柒圆柒角玖分",
        "价税合计(小写)": "￥5727.79",
        "备注": "研发楼东侧513房厅、514、517、518室"
    },
    "json_result_en": {
        "machineNo": null,
        "invoiceNo": "25122000000023665263",
        "invoiceType": "增值税专用发票",
        "specificBusinessTypes": null,
        "invoicingDate": "2025年04月14日",
        "purchaserName": "天津精信互动科技有限公司",
        "purchaserCode": "91120116MA06JG3A0T",
        "sellerName": "天津中科吴宇科技有限公司",
        "sellerCode": "91120116MA07J8594A",
        "tradeName": ["*企业管理服务*物业费", "*水冰雪*水费", "*水冰雪*水费", "*水冰雪*水费", "*供电*电费", "*供电*电费", "*供电*电费"],
        "model": ["2025.04.01-202\n5.06.30", "2025.01.01-202\n5.01.31", "2025.02.01-202\n5.02.28", "2025.03.01-202\n5.03.31", "2025.01.01-202\n5.01.31", "2025.02.01-202\n5.02.28", "2025.03.01-202\n5.03.31"],
        "unit": [null, null, null, null, null, null, null],
        "number": [null, null, null, null, null, null, null],
        "unitPrice": [null, null, null, null, null, null, null],
        "totalPrice": ["2011.84", "20.09", "17.18", "19.33", "1781.31", "1097.64", "246.09"],
        "taxRate": ["6%", "13%", "13%", "13%", "13%", "13%", "13%"],
        "taxAmount": ["120.71", "2.61", "2.23", "2.51", "231.57", "142.69", "31.99"],
        "totalAmount": "￥5193.48",
        "totalTax": "￥534.31",
        "payee": null,
        "reviewer": null,
        "drawer": "马晓静",
        "totalBig": "伍仟柒佰贰拾柒圆柒角玖分",
        "totalSmall": "￥5727.79",
        "remark": "研发楼东侧513房厅、514、517、518室"
    }
}
"""